//
//  HMNavigationViewController.swift
//  Weibo24
//
//  Created by Apple on 17/3/26.
//  Copyright © 2017年 KY. All rights reserved.
//

import UIKit

//  自定义导航控制器
class HMNavigationViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //  设置返回手势代理
        self.interactivePopGestureRecognizer?.delegate = self
    }
    
    //  重写方法，处理显示按钮和标题的逻辑
    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        //  不是控制图控制器
        if self.viewControllers.count > 0 {
            //  隐藏tabbar, 如果自定义的导航栏按钮，会有黑影
            viewController.hidesBottomBarWhenPushed = true
            //  解决办法： 1.设置window的背景色，2.设置tabbar的背景色
            if self.viewControllers.count == 1 {
                //  表示第二个控制器，获取第一个控制器的标题
                let title = self.viewControllers.first!.title!
                //  设置坐标导航栏按钮
                viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: title, imageName: "navigationbar_back_withtext", target: self, action: #selector(pushAction))
                //  标题
                viewController.title = "当前显示的是第\(self.viewControllers.count + 1)级控制器"
                
            } else {
                //  设置坐标导航栏按钮
                viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", target: self, action: #selector(pushAction))
                //  标题
                viewController.title = "当前显示的是第\(self.viewControllers.count + 1)级控制器"
            }
        }
        
        
        super.pushViewController(viewController, animated: animated)
        
    }
    
    //  MARK:   --导航栏按钮点击
    @objc private func pushAction() {
        self.popViewController(animated: true)
    }


}
//  MARK:   --返回手势代理
extension HMNavigationViewController: UIGestureRecognizerDelegate {
    //  是否开启返回手势
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if self.viewControllers.count == 1 {
            //  如果是根视图控制器了，就不需要返回手势了
            return false
        }
        return true
    }
}

